using System;

namespace Atomic.Vasp
{
	[Serializable]
	public class VaspConvergence
	{
		internal VaspConvergence()
		{
		}

		/// <summary>
		/// Assigns default values to various precision parameters (PREC tag).
		/// http://cms.mpi.univie.ac.at/vasp/vasp/PREC_tag.html
		/// </summary>
		public VaspPrecision? Precision
		{
			get;
			set;
		}

		/// <summary>
		/// Plane wave basis set cut-off energy in eV (ENCUT).
		/// http://cms.mpi.univie.ac.at/vasp/vasp/ENCUT_tag.html
		/// </summary>
		public double? PlaneWaveCutOff
		{
			get;
			set;
		}

		/// <summary>
		/// Global break condition for the electronic SC-loop (EDIFF tag).
		/// http://cms.mpi.univie.ac.at/vasp/vasp/EDIFF_tag.html
		/// </summary>
		public double? EnergyBreakCondition
		{
			get;
			set;
		}

		/*/// <summary>
		/// Maximum number of ionic steps (NSW). At each step at most NELM electronic-SC loops are performed unless
		/// the EDIFF convergence criterium is matched before.
		/// http://cms.mpi.univie.ac.at/vasp/vasp/NSW_tag.html
		/// </summary>
		public int? MaxIonicSteps // FIXME Move to a relaxation class???
		{
			get;
			set;
		}*/

		/// <summary>
		/// Maximum number of electronic SC-steps to be performed (NELM). Usually, there is no need to change the default value;
		/// if the self-consistency loop does not converge within 40 steps, it will probably not converge at all.
		/// http://cms.mpi.univie.ac.at/vasp/guide/node104.html
		/// </summary>
		public int? MaxElectronicSteps
		{
			get;
			set;
		}
	}
}
